#Использовать asserts

Перем юТест;
Перем ТекстПроверки;

Функция ПолучитьСписокТестов(Тестирование) Экспорт

	юТест = Тестирование;

	СписокТестов = Новый Массив;
	
	СписокТестов.Добавить("Тест_Должен_СверитьСтрокуСоСпецСимволами");
	СписокТестов.Добавить("Тест_Должен_СверитьСтрокуЭкранированнымиКириллическимиСимволами");
	СписокТестов.Добавить("Тест_Должен_СверитьХешСуммуСгенерированнойСтрокиJSON");
	СписокТестов.Добавить("Тест_Должен_СверитьХешСуммуСгенерированнойМетодомЗаписатьJSONСтруктуры");
	СписокТестов.Добавить("Тест_Должен_СверитьХешСуммуСгенерированнойМетодомЗаписатьJSONСтруктурыСФиксированнымиКоллекциями");
	
	Возврат СписокТестов;

КонецФункции

Процедура Тест_Должен_СверитьХешСуммуСгенерированнойСтрокиJSON() Экспорт
	
	Запись = Новый ЗаписьJson();
	Запись.УстановитьСтроку();
	Запись.ЗаписатьНачалоОбъекта();
	Запись.ЗаписатьИмяСвойства("firstName");
	Запись.ЗаписатьЗначение("Иван");
	Запись.ЗаписатьИмяСвойства("lastName");
	Запись.ЗаписатьЗначение("""Иванов""");
	
	Запись.ЗаписатьИмяСвойства("address");	
	Запись.ЗаписатьНачалоОбъекта();
	Запись.ЗаписатьИмяСвойства("streetAddress");
	Запись.ЗаписатьЗначение("Московское ш., 101, кв.101");
	Запись.ЗаписатьИмяСвойства("city");
	Запись.ЗаписатьЗначение("Ленинград");
	Запись.ЗаписатьИмяСвойства("postalCode");
	Запись.ЗаписатьЗначение(101101);
	Запись.ЗаписатьИмяСвойства("float");
	Запись.ЗаписатьЗначение(1.54);
	Запись.ЗаписатьИмяСвойства("undefined");
	Запись.ЗаписатьЗначение(Неопределено);
	Запись.ЗаписатьКонецОбъекта();

	Запись.ЗаписатьИмяСвойства("phoneNumbers");
	Запись.ЗаписатьНачалоМассива();
	Запись.ЗаписатьЗначение("812 123-1234");
	Запись.ЗаписатьЗначение("916 123-4567");
	Запись.ЗаписатьКонецМассива();
	
	Запись.ЗаписатьКонецОбъекта();
	
	Текст = Запись.Закрыть();
		
	Хеширование = Новый ХешированиеДанных(ХешФункция.CRC32);
	Хеширование.Добавить(Текст);	
		
	юТест.ПроверитьРавенство(Хеширование.ХешСумма, 2627237007);
	
КонецПроцедуры

Процедура Тест_Должен_СверитьСтрокуЭкранированнымиКириллическимиСимволами() Экспорт
	
ЗаписьJSON = Новый ЗаписьJSON;
Параметры = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Windows, , , ЭкранированиеСимволовJSON.СимволыВнеASCII);
		
ЗаписьJSON.УстановитьСтроку(Параметры);

ЗаписатьJSON(ЗаписьJSON, "Символы кириллицы");

юТест.ПроверитьРавенство(ЗаписьJSON.Закрыть(), """\\u0421\\u0438\\u043c\\u0432\\u043e\\u043b\\u044b \\u043a\\u0438\\u0440\\u0438\\u043b\\u043b\\u0438\\u0446\\u044b""");
	
КонецПроцедуры

Процедура Тест_Должен_СверитьСтрокуСоСпецСимволами() Экспорт
	
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();

ЗаписатьJSON(ЗаписьJSON,  Символ(1) + Символ(31));
юТест.ПроверитьРавенство(ЗаписьJSON.Закрыть(), """\u0001\u001f""");
	
КонецПроцедуры

Процедура Тест_Должен_СверитьХешСуммуСгенерированнойМетодомЗаписатьJSONСтруктурыСФиксированнымиКоллекциями() Экспорт
	
	Запись = Новый ЗаписьJson();
	Запись.УстановитьСтроку();
	
	Структура = Новый Структура();
	
	МассивОбычный = Новый Массив();
	МассивОбычный.Добавить("1");
	
	ВложенныйМассив = Новый Массив();
	ВложенныйМассив.Добавить("2.1");
	ВложенныйМассив.Добавить("2.2");
	ФиксМассив = Новый ФиксированныйМассив(ВложенныйМассив);
	
	МассивОбычный.Добавить(ФиксМассив);
	
	Структура.Вставить("МассивОбычный", МассивОбычный);
	
	соответствие = Новый Соответствие();
	соответствие.Вставить("ЭлементСоответствия", "ЗначениеСоовтетствия");
	
	ФиксированноеСоответствие = Новый ФиксированноеСоответствие(соответствие);
	Структура.Вставить("ФиксированноеСоответствие", ФиксированноеСоответствие);
	
	ФиксированнаяСтруктура = Новый ФиксированнаяСтруктура(Структура);
	
	ЗаписатьJSON(Запись, ФиксированнаяСтруктура);	
	
	Текст = Запись.Закрыть();
	
	Хеширование = Новый ХешированиеДанных(ХешФункция.CRC32);
	Хеширование.Добавить(Текст);	
	
	юТест.ПроверитьРавенство(Хеширование.ХешСумма, 3499253905);
	
КонецПроцедуры

Процедура Тест_Должен_СверитьХешСуммуСгенерированнойМетодомЗаписатьJSONСтруктуры() Экспорт
	
	Текст = Новый ТекстовыйДокумент();
	Текст.Прочитать("json\json-mock_struct.json", КодировкаТекста.UTF8);

	Чтение = Новый ЧтениеJSON;
	Чтение.УстановитьСтроку(Текст.ПолучитьТекст());
	Структура = ПрочитатьJSON(Чтение);
	
	Запись = Новый ЗаписьJson();
	Запись.УстановитьСтроку();	
	ЗаписатьJSON(Запись, Структура);	
	
	Текст = Запись.Закрыть();
	
	Хеширование = Новый ХешированиеДанных(ХешФункция.CRC32);
	Хеширование.Добавить(Текст);	
	
	юТест.ПроверитьРавенство(Хеширование.ХешСумма, 3352482152);
	
КонецПроцедуры
